package ua.edu.test;

import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import ua.edu.test.adapter.TabsPagerAdapter;
import ua.edu.test.db.DBWork;
import ua.edu.test.menu.AboutProgram;
import ua.edu.test.menu.BankInfoList;
import ua.edu.test.tab1actions.common.fragments.Actions;
import ua.edu.test.tab1actions.common.fragments.UserCards;
import ua.edu.test.tab1actions.unique.fragments.Balance;
import ua.edu.test.tab1actions.unique.fragments.ReplenishMobTel;
import ua.edu.test.tab2mycards.AddCard;
import ua.edu.test.tab2mycards.MyCards;

import java.util.ArrayList;

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

    private static final String LOG_TAG = MainActivity.class.getName();


    private static final int[] tabs = {R.string.action, R.string.my_cards};
    private ViewPager viewPager;
    private ActionBar actionBar;
    private TabsPagerAdapter tabsPagerAdapter;

    private ArrayList<Fragment> pageItemArrayList;

    private Fragment tab1;
    private Fragment tab2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pager);


        DBWork.initialized(getApplicationContext());


        tab1 = new Actions();
        tab2 = new MyCards();
        //создаем и заполняем все 2 таба при создании программы
        //=========================
        actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setBackgroundDrawable(getResources().getDrawable(R.color.Silver));


        pageItemArrayList = new ArrayList<Fragment>();
        pageItemArrayList.add(tab1);
        pageItemArrayList.add(tab2);

        tabsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager(), pageItemArrayList);
        tabsPagerAdapter.setPagerAllItems(pageItemArrayList);

        viewPager = (ViewPager) findViewById(R.id.pager);
        viewPager.setAdapter(tabsPagerAdapter);
        //=====================================

        //добавляем все табы на actionBar
        for (int tabName : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tabName).setTabListener(this));
        }

        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageSelected(int pos) {
                actionBar.setSelectedNavigationItem(pos);
            }

            @Override
            public void onPageScrolled(int pos, float v, int i2) {
            }

            @Override
            public void onPageScrollStateChanged(int i) {
            }
        });
    }


    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        viewPager.setCurrentItem(tab.getPosition());

    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    }


    @Override
    public void onBackPressed() {
        showTab1Action();
        showTab2MyCards();
    }


//	===========================================
//					for Tab 1
//	===========================================

    // первое окно (общее) - действия
    public void showTab1Action() {
        loadFrToTab1(new Actions());
    }


    // второе окно (общее) - выбор карты
    public void showTab1UserCard() {
        loadFrToTab1(new UserCards());
    }


    //третье окно (уникальное) - переход на выбранное действие
    public void showTab1SelUniqueFr(String action) {
        if (action.equals(AllActions.BALANCE)) {
            loadFrToTab1(new Balance());
        } else if (action.equals(AllActions.REPLENISH_MOB_TEL)) {
            loadFrToTab1(new ReplenishMobTel());
        }
    }

    public void showTab1AddCard() {
        loadFrToTab1(new AddCard());
    }

//	===========================================
//					for Tab 2
//	===========================================

    // основное окно во втором табе
    public void showTab2MyCards() {
        loadFrToTab2(new MyCards());
    }

    // позволяет добавить новую карту
    public void showTab2AddCard() {
        loadFrToTab2(new AddCard());
    }

//	============================================

//	public static final String TAB_1 = "0";

    private void loadFrToTab1(Fragment t1) {
        tab1 = t1;
        exeTabs(0);
    }

    private void loadFrToTab2(Fragment t2) {
        tab2 = t2;
        exeTabs(1);
    }


    private void exeTabs(int tabNumber) {
        pageItemArrayList = new ArrayList<Fragment>();
        Log.d(LOG_TAG, "TAB 1 = " + tab1);
        Log.d(LOG_TAG, "TAB 2 = " + tab2);
        pageItemArrayList.add(tab1);
        pageItemArrayList.add(tab2);

        tabsPagerAdapter.setPagerItem(pageItemArrayList, tabNumber);

        ViewPager viewPager1 = (ViewPager) findViewById(R.id.pager);
        viewPager1.setAdapter(tabsPagerAdapter);

        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.getTabAt(1);
    }


    /**
     * В этом методе производится выбор
     * телефонного номера из доступных контактов
     *
     * @return String - выбранный номер телефона из книги контактов
     */
    public String getSelectedPhoneBookContact() {
        return "+380551234511";
    }

    /**
     * В этом методе возвращается номер телефона, пользователя
     *
     * @return String - собственный номер телефона пользователя (из sim карты)
     */
    public String getMyTelNumber() {
        return "0961234567";
    }


    /**
     * Производит пополнение моб тел (запуск сервиса и т.д.)
     *
     * @param context
     * @param state
     */
    public void goReplMobTel(Context context, boolean state) {
        if (state) {
            Toast.makeText(context, "Пополнение телефона выполнено успешно !", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "Действие отменено", Toast.LENGTH_SHORT).show();
        }
    }

    public void goReplMobTel(boolean state) {
        if (state) {
            Toast.makeText(getApplicationContext(), "Пополнение телефона выполнено успешно !", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getApplicationContext(), "Действие отменено", Toast.LENGTH_SHORT).show();
        }
    }


    /**
     * Заполнение элементов меню при старте программы
     *
     * @param menu
     * @return
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;

    }

    /**
     * Обработка выбранного пункта меню
     *
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_settings:
                Log.d(LOG_TAG, "selected menu_settings");
                return true;
            case R.id.menu_banks_informs:
                Log.d(LOG_TAG, "selected menu_banks_informs");
                startActivity(new Intent(this, BankInfoList.class));
                return true;
            case R.id.menu_about_program:
                startActivity(new Intent(this, AboutProgram.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}
